package br.unioeste.sim;

import java.net.*;

public class Enviar implements Runnable {

	private int id;
	private int linha;
	private int router;
	int PORTA = 5000;

	public Enviar(int idRouter, int aux) {
		id = idRouter;
		linha = aux;
	}

	public void envia() throws Exception {
		
		for (int i = 0; i < Simulator.roteadores.size(); i++) {
			if (Simulator.roteadores.get(i).getID() == id) {
				router = i;
			}
		}

		for (int i = 0; i < Simulator.roteadores.size(); i++) {

			if (Simulator.roteadores.get(i).getID() != id) {
				DatagramSocket socketUDP = new DatagramSocket();
				InetAddress IPServidor = InetAddress.getByName("127.0.0.1");

				int vet[] = Simulator.roteadores.get(router).getLinha(linha);
				byte msgEnvio[] = new byte[Simulator.roteadores.size() + 1];

				for (int j = 0; j < Simulator.roteadores.size() + 1; j++) {

					msgEnvio[j] = (byte) vet[j];
				}

				// datagrama UDP (pacote) de envio
				DatagramPacket datagrama = new DatagramPacket(msgEnvio,
						msgEnvio.length, IPServidor, PORTA
								+ Simulator.roteadores.get(i).getID());
				socketUDP.send(datagrama);
				socketUDP.close();
			}
		}
		Simulator.roteadores.get(router).setMudanca(false);
	}
	
	public boolean verifica(){
		return Simulator.roteadores.get(router).isMudanca();
	}

	@Override
	public void run() {
		try {
			envia();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		while (true) {
			if (verifica()) {
				try {
					envia();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}
